#include <REGX52.H>
/**
 * 灯一开始是常亮状态
 * 按一下变为闪烁。
 * 按一下熄灭。
 * 按一下常亮。
 * 三个状态切换
 *
 */
// 引脚定义（根据电路图）
sbit LED = P3^1;   // LED 接 P3.1
sbit BTN = P3^7;   // 按钮接 P3.7

// 状态枚举
typedef enum {
    STATE_ON,     // 常亮
    STATE_BLINK,  // 闪烁
    STATE_OFF     // 熄灭
} LED_State;

LED_State currentState = STATE_ON; // 初始状态：常亮
unsigned int blinkDelay = 200;    // 闪烁延时（可调整）
void delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 123; j++)
            ;
    }
}

void main()
{
    LED=1;//开始状态常亮
    while(1){
        if (BTN == 0) {
            delay_ms(20);       // 消抖
            while (BTN == 0);   // 等待释放
            
            // 状态切换
            switch (currentState) {
                case STATE_ON:
                    currentState = STATE_BLINK;
                    break;
                case STATE_BLINK:
                    currentState = STATE_OFF;
                    break;
                case STATE_OFF:
                    currentState = STATE_ON;
                    break;
            }
        }
        
        // 根据状态执行动作
        switch (currentState) {
            case STATE_ON:
                LED = 1;  // 常亮（根据硬件调整电平）
                break;
            case STATE_BLINK:
                LED = ~LED;  // 翻转状态实现闪烁
                delay_ms(blinkDelay);
                break;
            case STATE_OFF:
                LED = 0;  // 熄灭（根据硬件调整电平）
                break;
        }
    
    }

}